home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 5_5.lha / 5_5 / 5_5e5.c < prev    next >
Text File  |  1993-08-08  |  912b  |  46 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. tatic tree* prim(istream& input)
  6.  
  7.    switch (curr_tok.type)
  8. {
  9. case NUMBER:
  10.     number_leaf* retn =
  11.     new number_leaf(curr_tok.value);
  12.     get_token(input);        // skip number
  13.     return retn;
  14.  
  15. case MINUS:
  16.     unary_minus_op *retm = new unary_minus_op;
  17.     get_token(input);        // skip '-'
  18.     retm->left = prim(input);
  19.     return retm;
  20.  
  21. case LP:
  22.     lparen_op *retlp = new lparen_op;
  23.     get_token(input);        // skip '('
  24.     retlp->left = get_expr(input);
  25.     if (curr_tok.type != RP)
  26.     {
  27.     error(") expected");
  28.     break;
  29.     }
  30.     get_token(input);        // skip ')'
  31.     return retlp;
  32.  
  33. case END:
  34.     error("end of expression unexpected");
  35.     break;
  36.  
  37. default:
  38.     error("unknown type within tree");
  39.     break;
  40. }
  41.  
  42.    // error case
  43.    number_leaf *ret = new number_leaf(0);
  44.    return ret;
  45.  
  46.